昨天我們看到 Conan 對套件管理的基本原則是「預編譯優先(Prebuilt-first)」:官方伺服器有大量預先編好的二進位檔,它希望你盡可能的下載預先編譯好的套件,只有刻意手動指定時,才會在本機編譯套件。
而 vcpkg 的哲學正好相反,它是**「原始碼優先(Source-first)」**。
vcpkg 官方預設不提供全世界各種環境的中央伺服器,它信任你的本地工具鏈,第一次安裝時一律「現場編譯」。
本機開發時還過得去吧,反正只有第一次要編譯,編過一次,產物就會留在硬碟裡。
但換到 CI/CD 環境,事情就完全不是這麼一回事了。
現代 CI(如 GitHub Actions、GitLab CI)的執行機器大部分是拋棄式容器,每次觸發都是一台全新的虛擬機。
想像一下,萬一你的專案依賴了 Boost + Protobuf + OpenSSL + gRPC。每次有人改動程式碼,基於第一次現場編譯的原則,CI 每次都要從頭花 40 分鐘編譯套件原始碼。工程師咖啡不知道喝幾杯了,還沒看到結果,團隊的 CI 預算也全都浪費在一次又一次重複編譯套件上。
怎麼辦呢?這就是為什麼 vcpkg 必須有 **Binary Caching(二進位快取)**這個功能。